//寻找枢纽点k
//给定一个无序整数数组 `nums`，请设计一个时间复杂度为 O(n) 的算法，找出一个满足以下条件的元素 `k`（如果存在）：
//- 在数组中，`k` 的所有左侧元素（如果存在）都严格小于 `k`；
//- `k` 的所有右侧元素（如果存在）都严格大于 `k`。
//注意：可能存在多个这样的 `k`，你只需要返回任意一个即可。如果不存在这样的元素，返回 - 1。

int findPivot(const vector<int>& nums)
{
    if (nums.size() == 0) {
        return -1;
    }
    if (nums.size() == 1) {
        return nums[0];
    }
    int n = nums.size();
    vector<int> rightMin_v(n);
    int rightMin = INT_MAX;
    for (int i = n - 1;i >= 0;++i)
    {
        rightMin = std::min(nums[i], rightMin);
        rightMin_v[i] = rightMin;
    }
    if (nums[0] < rightMin_v[1]) {
        return nums[0];
    }
    int leftMax = nums[0];
    for (int i = 1;i < n - 1;++i)
    {
        if (nums[i] > leftMax && nums[i] < rightMin_v[i + 1])
        {
            return nums[i];
        }
        leftMax = std::max(leftMax, nums[i]);
    }
    if (leftMax < nums[n-1])
    {
        return nums[n - 1];
    }
    return -1;
}